package de.ssmp.wbs.daten;

import java.util.ArrayList;
import java.util.HashMap;

import de.ssmp.wbs.Utilities;

/**
 * Ergebnis ist die Vorhersage aufgrund der erlernten Trainingsdaten fuer einen
 * Fussballspieler, welches angibt wohin der Schuss gehen könnte.
 * 
 * @author stiewen
 * @author maximilian
 * @version 1
 * 
 */
public class Ergebnis {

	/* Attribute */
	private String ziel;

	private ArrayList<Torschuss> alObereGrenze;

	private ArrayList<Torschuss> alUntereGrenze;

	/* Constructor */
	public Ergebnis(String ziel) {
		// setze Ziel für das Ergebnis
		this.ziel = ziel;

		// Erzeuge neue HashMap für Torschuss-Attribute, welche das Ziel
		// aufweißt. Dies beschreibt sozusagen die Situation in der ein Spieler
		// auf die zuvordefinierte Zielstelle schießt.
		HashMap<String, String> alAttributes = new HashMap<String, String>();

		// Setze obere Grenze
		for (String strAttribut : Utilities.keys)
			alAttributes.put(strAttribut, Utilities.STAR);

		this.alObereGrenze = new ArrayList<Torschuss>();
		this.alObereGrenze.add(new Torschuss(alAttributes));

		// Setze untere Grenze
		alAttributes = new HashMap<String, String>();
		for (String strAttribut : Utilities.keys)
			alAttributes.put(strAttribut, Utilities.UNDERSCORE);

		this.alUntereGrenze = new ArrayList<Torschuss>();
		this.alUntereGrenze.add(new Torschuss(alAttributes));

	}

	/* Getter&Setter */
	/**
	 * @return ziel Ein String welcher das Ziel spezifiziert.
	 */
	public String getZiel() {
		return this.ziel;
	}

	/**
	 * Ein Setter zum setzen eines Ziel-Strings (Ziel im Tor).
	 */
	public void setZiel(String ziel) {
		this.ziel = ziel;
	}

	/**
	 * Setter zum setzen der oberen Grenze des Versionsraumes.
	 */
	public void setObereGrenze(ArrayList<Torschuss> torschuesse) {
		this.alObereGrenze = torschuesse;
	}

	/**
	 * Setter zum setzen der unteren Grenze des Versionsraumes.
	 */
	public void setUntereGrenze(ArrayList<Torschuss> torschuesse) {
		this.alUntereGrenze = torschuesse;
	}

	/**
	 * @return Gibt die obere Grenze des Versionsraumes zurück, in Form einer
	 *         ArrayList<Torschuss>.
	 */
	public ArrayList<Torschuss> getObereGrenze() {
		return this.alObereGrenze;
	}

	/**
	 * @return Gibt die untere Grenze des Versionsraumes zurück, in Form einer
	 *         ArrayList<Torschuss>.
	 */
	public ArrayList<Torschuss> getUntereGrenze() {
		return this.alUntereGrenze;
	}

	/* Overriden methods */
	@Override
	public String toString() {
		String strReturn = "[\nErgebnis:Ziel:" + getZiel() + "\n";
		// strReturn += "vvvvvvv Obergrenze vvvvvvv\n";
		// for ( Torschuss torschuss : this.alObereGrenze )
		// strReturn += torschuss;
		// strReturn += "^^^^^^^^^^^^^^^^^^^^^^^^\n";
		// strReturn += "vvvvvvv Untergrenze vvvvvvv\n";
		for (Torschuss torschuss : this.alUntereGrenze)
			strReturn += torschuss + "\n";
		// strReturn += "^^^^^^^^^^^^^^^^^^^^^^^^\n";
		strReturn += "]";

		return strReturn;
	}

}
